文字列を利用した演算(評価過程)・let n = 10 in if n <= 0 then 1 else n - 2expval (Let ([Decl "n" (Num "10")]) (If (Rexpr LessEq (Var "n") (Num "0"))(Num "1", Bexpr Minus (Var "n") (Num "2")))) none = expval (If (Rexpr LessEq (Var "n") (Num "0"))(Num "1", Bexpr Minus (Var "n") (Num "2"))) (recdecl ([Decl "n" (Num "10")]) none) | v = expval (Num "1") (recdecl ([Decl "n" (Num "10")]) none) | otherwise = expval (Bexpr Minus (Var "n") (Num "2")) (recdecl ([Decl "n" (Num "10")]) none) where V_Bool v = expval (Rexpr LessEq (Var "n") (Num "0")) (recdecl ([Decl "n" (Num "10")]) none) = V_Bool (relopr LessEq v v') = where V_Int v = expval (Var "n") (recdecl ([Decl "n" (Num "10")]) none) = lookup1 (recdecl ([Decl "n" (Num "10")]) none) "n" = (recdecl ([Decl "n" (Num "10")]) none) "n" = (foldl declenv' "n" ([Decl "n" (Num "10")])) declenv' "n" ([Decl "n" (Num "10")]) = declenv ([Decl "n" (Num "10")]) "n" "n" = update "n" "n" (expval (Num "10")) "n" = update "n" "n" (V_Int 10) = V_Int 10 = foldl (V_Int 10) =V_Int 10 V_Int v' = expval (Num "0") (recdecl ([Decl "n" (Num "10")]) none) = V_Int (Numval "0") = V_Int 0 = V_Bool (relopr LessEq 10 0) = 10(<=)0 = V_Bool False =expval (Bexpr Minus (Var "n") (Num "2")) (recdecl ([Decl "n" (Num "10")]) none) =V_Int (binopr Minus v v') where V_Int v = expval (Var "n") (recdecl ([Decl "n" (Num "10")]) none) = lookup1 (recdecl ([Decl "n" (Num "10")]) none) "n" = (recdecl ([Decl "n" (Num "10")]) none) "n" =(foldl declenv' "n" ([Decl "n" (Num "10")])) declenv' "n" ([Decl "n" (Num "10")]) = declenv ([Decl "n" (Num "10")]) "n" "n" = update "n" "n" (expval (Num "10")) "n" = update "n" "n" (V_Int 10) = V_Int 10 = foldl (V_Int 10) =V_Int 10 V_Int v' = expval (Num "2") (recdecl ([Decl "n" (Num "10")]) none) = V_Int (numval "2") = V_Int 2 =V_Int (binopr Minus (10) (2)) =V_Int ((10)(-)(2)) =V_Int 8 |